package main

import "fmt"

func main() {
	//定义数组
	var intarr [6]int = [6]int{1, 2, 3, 4, 4, 5}
	//方式一 通过数组创建切片
	var slice []int = intarr[1:3]
	fmt.Println("slice的元素的个数:", slice)
	fmt.Println("切片的容量:", cap(slice))
	fmt.Printf("数组下标为1位置的地址:%p \n", &intarr[1])
	fmt.Printf("数组下标为0位置的地址:%p \n", &slice[0])

	//方式二 通过make创建切片

	slice = make([]int, 4, 20)
	fmt.Println(slice)
	fmt.Println("切片的长度:", len(slice))
	fmt.Println("切片的容量:", cap(slice))
	slice[0] = 66
	slice[1] = 88
	fmt.Println(slice)

	//切片可以继续切片
	var intarr2 [6]int = [6]int{1, 4, 5, 6, 7, 8}
	slice = intarr2[1:4]
	fmt.Println(slice)
	fmt.Println(cap(slice))
	slice2 := slice[1:2]
	slice2[0] = 44
	fmt.Println(intarr2)
	fmt.Println(slice)
	fmt.Println("=============================================")
	SliceFunction()
	SliceCopy()
}

//切片可以动态增长
func SliceFunction() {
	var intarr [6]int = [6]int{1, 4, 5, 6, 7, 8}
	var slice = intarr[1:4]
	fmt.Println(slice)
	//在底层追加元素的时候 实际上是对数组进行扩容
	slice=append(slice,88,54)
	fmt.Println(slice)
	fmt.Println(len(slice))
}
//拷贝
func SliceCopy(){
	var a[]int=[]int{2,3,4,5,5,6,7,78}
	var b []int =make([]int,5,10)
	copy(b,a)
	fmt.Println(b)
}
